MarkDown 语法‰ˆ

什么是 Markdown?

  1. Markdown 是一款轻量级标记语言,不同于HTML (Hypertext Markup Language)Markdown 的语法非常简单,且容易上手
  2. Markdown纯文本格式 编写文档,依赖键盘而非鼠标,专注于写作本身,感受书写的魅力
  3. Markdown 的通过添加一些简单的 标识符,让文本具有恰到好处的格式
  4. Markdown 核心特征就是 删繁剪芜简扼 + 精炼
  5. Markdown笔记网页文章 的最佳载体
  6. Down 的核心:坐 来,就能把思维写
    • 牛津高阶英汉双解词典第九版 中,关于 down 的释义:

牛津9 down释义


为什么要使用 Markdown?

有朋友问我 ,Markdown 的效果 用Word 完全可以复现,甚至功能更多,那为何要用 Markdown 呢?

答:

MD的优势:

  1. Markdown 让我们免于 被繁杂臃肿的功能晃花了眼 的困扰
  2. Markdown 让我们回归内容本身,拥抱笔记的内核,而非浮于表象的样式,写出高效精练的笔记!

Markdown 写东西,记住一个原则

能用10个字搞定的,绝不用11个字

经常使用 Markdown 书写的朋友,也许会有一种奇妙的感触

关于标识符的滥用

这个其实是写在最后的,之所以放在这里,是因为它很重要

如果你有一定的MD语法基础,可以直接点击跳转


Markdown 相关软件推荐



Markdown 语法

1. 标题&目录


1.1 标题

这是一段普通的文本

# 这是一级标题
## 这是二级标题
### 这是三级标题
#### 这是四级标题
##### 这是五级标题
###### 这是六级标题 

1.2 目录

输入下方内容会生成一个目录:

[toc]



2. 斜体&粗体


2.1 斜体

这是一段普通文本

*这里是一段斜体文本*
_这也是一段斜体文本_

示范

这是一段普通文本

这里是一段斜体文本
这也是一段斜体文本


2.2 粗体

这是一段普通文本

**这里是一段加粗文本**
__这也是一段加粗文本__

示范

这是一段普通文本

这里是一段加粗文本
这也是一段加粗文本


2.3 粗斜体 (斜粗体)

这是一段普通文本

***粗斜体文本1***
___粗斜体文本2___
**_粗斜体文本3_**
__*粗斜体文本4*__
*__粗斜体文本5__*
_**粗斜体文本6**_

示范

这是一段普通文本

粗斜体文本1
粗斜体文本2
粗斜体文本3
粗斜体文本4
粗斜体文本5
粗斜体文本6


2.4 斜体包含粗体

这是一段普通文本

*这里是一段斜体中**包含粗体**的文字*
_这也是一段斜体中**包含粗体**的文字_
*这又是一段斜体中__包含粗体__的文字*
_这还是一段斜体中**包含粗体**的文字_

示范

这是一段普通文本

这里是一段斜体中包含粗体的文字
这也是一段斜体中包含粗体的文字
这又是一段斜体中__包含粗体__的文字
这还是一段斜体中包含粗体的文字


2.5 粗体包含斜体

这是一段普通文本

**这里是一段粗体中*包含斜体*的文字**
__这也是一段粗体中_包含斜体_的文字__
**这又是一段粗体中_包含斜体_的文字**
__这还是一段粗体中*包含斜体*的文字__

示范

这是一段普通文本

这里是一段粗体中包含斜体的文字
这也是一段粗体中_包含斜体_的文字
这又是一段粗体中_包含斜体_的文字
这还是一段粗体中包含斜体的文字



3. 线


3.1 水平分割线

下面是一条水平分割线:
---
***

示范




3.2 文本删除线

~~这是一段加了删除线的文本~~

示范

这是一段加了删除线的文本


3.3 文本下划线

<u>这是一段加了下划线的文本</u>

示范

这是一段加了下划线的文本



4. 列表&引用


4.1 有序列表

1. 这是第一个有序列表 <!-- (Enter) -->
2. 这是第二个有序列表 <!-- (Enter) -->
3. 这是第三个有序列表 


1. 这是第一个有序列表 <!-- (Shift + Enter) -->
   这是同个列表下,另起一行的文本内容 <!-- (Enter) -->
2. 这是第二个有序列表 <!-- (Shift + Enter) -->
   这是同个列表下,另起一行的文本内容 

示范

  1. 这是第一个有序列表

  2. 这是第二个有序列表

  3. 这是第三个有序列表

  4. 这是第一个有序列表
    这是同个列表下,另起一行的文本内容

  5. 这是第二个有序列表
    这是同个列表下,另起一行的文本内容

补充

- 10.这是无序列表下,整十数排列的内容
- 20.这是无序列表下,整十数排列的内容
- 30.这是无序列表下,整十数排列的内容


- 100.这是无序列表下,整百数排列的内容
- 200.这是无序列表下,整百数排列的内容
- 300.这是无序列表下,整百数排列的内容

效果:



4.2 无序列表

- 这是第1个无序列表 <!-- (Enter) -->
- 这是第2个无序列表 <!-- (Enter) -->
- 这是第3个无序列表

- 这是第一个无序列表 <!-- (Shift + Enter) -->
  这是同个列表下,另起一行的文本内容
- 这是第二个无序列表 <!-- (Shift + Enter) -->
  这是同个列表下,另起一行的文本内容 

示范



4.3 引用

>这是第一段引用文本的第1行 <!-- (Enter) -->
>这是第一段引用文本的第2行 <!-- (Enter) -->
<!-- (Enter) -->
>这是第二段引用文本的第1行 <!-- (Enter) -->
>这是第二段引用文本内第2行

示范

这是第一段引用文本的第1行
这是第一段引用文本的第2行

这是第二段引用文本的第1行
这是第二段引用文本的第2行


4.4 缩进&退格

在列表和引用的书写过程中,我们需要利用 缩进退格 ,让文章肌理分明,更具层级


4.4.1 有序列表的缩&退

1. 第一级有序列表1 <!-- (Enter) -->
	1. 第二级有序列表1    <!-- 写文本之前,先( Tab 或 Ctrl + ] ) ;写完文本后,再(Enter) -->
	2. 第二级有序列表2 <!-- (Enter) -->
2. 第一级有序列表2    <!-- 写文本前,先 ( Shift + Tab 或 Ctrl + [ ) --> 
示范
  1. 第一级有序列表1
    1. 第二级有序列表1
    2. 第二级有序列表2
  2. 第一级有序列表2

4.4.2 无序列表的缩&退

- 第一级无序列表1 <!-- (Enter) -->
	- 第二级无序列表1  <!-- 写文本前,先( Tab 或 Ctrl + ] ) ;写完后,再(Enter) -->
	- 第二级无序列表2 <!-- (Enter) -->
- 第一级无序列表2  <!-- 写文本前,先 ( Shift + Tab 或 Ctrl + [ ) -->
示范

4.4.3 引用的缩&退

>第一级引用1 <!-- (enter) -->
>>第二级引用1 <!-- 先打1个 > (这里的第一个 > 是会自动补充的,只需额外增补1个即可) ,再(enter) -->
>>第二级引用2 <!-- (enter) -->
>第一级引用2   <!-- 写文本前,先 ( Shift + Tab 或 Ctrl + [ ) -->
示范

第一级引用1

第二级引用1
第二级引用2

第一级引用2


Gif演示1:


引用退格1


111

222

333

444

555


Gif演示2:

引用退格2


111

222

333

444

555

666

777


4.4.4 有序&无序&引用 连续套娃

1. 第一级 有序列表1 <!-- (Shift + Enter) --> 
	- 第二级 无序列表1 <!-- (Shift + Enter) -->
		>第三级 引用1  <!-- (Enter) -->
			- 第四级 无序列表2 <!-- (Shift + Enter) -->
            	1. 第五级 有序列表2 <!-- (Enter) -->
            - 第四级 无序列表3   <!-- 写文本前,先( Shift + Tab 或 Ctrl + [ ) ;写完后再 (Enter) -->
        >第三级 引用2  <!-- 写文本前,先( Shift + Tab 或 Ctrl + [ ) ;写完后再 (Enter × 2) -->
    - 第二级 无序列表4  <!-- 写文本前,先( Shift + Tab 或 Ctrl + [ ) -->
2. 第一级 有序列表3  <!-- 写文本前,先( Shift + Tab 或 Ctrl + [ ) -->
示范
  1. 第一级 有序列表1

    • 第二级 无序列表1

      第三级 引用1

      • 第四级 无序列表2
        1. 第五级 有序列表2
      • 第四级 无序列表3

      第三级 引用2

    • 第二级 无序列表4

  2. 第一级 有序列表3

4.4.5 Obsidian 的一些缩退问题

- - 这是第一段就被缩进的列表
	- 这是第二段被再次缩进的列表  <!-- 这里需按两次 Ctrl + ] ,Tab键是无效的 -->
  - 这是第三段列表  <!-- Ctrl + [ -->



5. 网页链接与图像


5.1 网页链接

[显示文本内容](链接地址 "提示信息文本")

[百度一下,你就知道](http://www.baidu.com "按住Ctrl点击跳转百度")

示范:

百度一下,你就知道


5.1.1链接的加粗



5.2 图像

![文字信息](图片链接 "提示文本信息")	

![湘湖1](https://z3.ax1x.com/2021/08/06/fuNkXq.jpg "湘湖一角")

示范

湘湖1|400



6. 表格

|这里是表头1|这里是表头2|这里是表头3|
|:-|:-:|-:|    <!--区分表头和表格主体,:代表文本对齐方式,分别是左对齐,居中对齐,右对齐-->
|单元格数据1|单元格数据2|单元格数据3|
|单元格数据4|单元格数据5|单元格数据6|

示范

这里是表头1 这里是表头2 这里是表头3
单元格数据1 单元格数据2 单元格数据3
单元格数据4 单元格数据5 单元格数据6

6.1 表格中文本内容的换行

如下图所示:

表头1 表头2
这是一段很长很长很长很长很长很长很长很长很长很长很长很长很长很长的文本 普通文本
| 表头1 |  表头2 |
|:-:|:-:|
|这是第一行文本<br>这是另起一行的文本|普通文本|

示范

表头1 表头2
这是第一行文本
这是另起一行的文本
普通文本



7. 代码域


7.1 行内代码

`这是一段行内代码`

`<table border="1" cellspacing="0" width="500" height="500">`

`print("Hello, World!")`

`这是一行突出显示的文本内容`

示范

<table border="1" cellspacing="0" width="500" height="500">


print("Hello, World!")


这是一行突出显示的文本内容


7.2 代码块

```语言种类
代码内容
代码内容
代码内容
```

下面是HTML代码块

```html
<table border="1">
    <tr>
        <td>row 1, cell 1</td>
        <td>row 1, cell 2</td>
    </tr>
    <tr>
        <td>row 2, cell 1</td>
        <td>row 2, cell 2</td>
    </tr>
</table>
```

下面是CSS代码块

```css
.box {
	width: 600px;
	height: 400px;
	margin: 100px auto;
	background-image: linear-gradient(black 33.3%,red 33.3%, red 66.6%, yellow 66.6%, yellow);
}	
```

下面是JavaScript代码块

```js
    // 定义一个30个整数的数组,按顺序分别赋予从2开始的偶数;然后按顺序每五个数求出一个平均值,放在另一个数组中并输出。试编程
    let arr = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60]
    let newarr = [];
    for (let i = 0, count = 0, sum = 0, len = arr.length; i < len; i++) {
        sum += arr.shift();
        count++;
        if (count % 5 === 0) {
            newarr.push(sum / 5);
            sum =  0;
        }
    }
    console.log(newarr);

    let arr = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60]
    let newarr = [];
    for (let i = 0, len = arr.length; i < len / 5; i++) {
        let subarr = arr.splice(0, 5)
        for (let j = 0, sum = 0; j < subarr.length; j++) {
            sum += subarr[j];
        }
        newarr.push(sum / 5);
    }
    console.log(newarr);
```


下面是Python代码块

```python
#!/usr/bin/python
# -*- coding: UTF-8 -*-

i = 2
while(i < 100):
   j = 2
   while(j <= (i/j)):
      if not(i%j): break
      j = j + 1
   if (j > i/j) : print i, " 是素数"
   i = i + 1
 
print "Good bye!"
```

下面是一块突出显示的文本

```txt
这是一段
突出显示的
文本内容
```

示范

<table border="1">
    <tr>
        <td>row 1, cell 1</td>
        <td>row 1, cell 2</td>
    </tr>
    <tr>
        <td>row 2, cell 1</td>
        <td>row 2, cell 2</td>
    </tr>
</table>
.box {
	width: 600px;
	height: 400px;
	margin: 100px auto;
	background-image: linear-gradient(black 33.3%, red 33.3%, red 66.6%, yellow 66.6%, yellow);
}	
// 定义一个30个整数的数组,按顺序分别赋予从2开始的偶数;然后按顺序每五个数求出一个平均值,放在另一个数组中并输出。试编程
let arr = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60]
let newarr = [];
for (let i = 0, count = 0, sum = 0, len = arr.length; i < len; i++) {
	sum += arr.shift();
	count++;
	if (count % 5 === 0) {
		newarr.push(sum / 5);
		sum =  0;
	}
}
console.log(newarr);

let arr = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60]
let newarr = [];
for (let i = 0, len = arr.length; i < len / 5; i++) {
	let subarr = arr.splice(0, 5)
	for (let j = 0, sum = 0; j < subarr.length; j++) {
		sum += subarr[j];
	}
	newarr.push(sum / 5);
}
console.log(newarr);
#!/usr/bin/python
# -*- coding: UTF-8 -*-

i = 2
while(i < 100):
   j = 2
   while(j <= (i/j)):
      if not(i%j): break
      j = j + 1
   if (j > i/j) : print i, " 是素数"
   i = i + 1
 
print "Good bye!"
这是一段
突出显示的
文本内容

7.2.1 代码块的嵌套


格式:

示范
````txt
```js
// 3. 输出 100以内(不包括100) 所有偶数的和
// 这类求和问题的核心 : 利用循环  (总和 = 旧数的和 + 新数)

let sum = 0;

for (let i = 1, sum = 0; i < 100; i++) {
 if (i % 2 == 0) {
 // 筛选偶数
 sum += i; // sum = sum + i // 累加偶数并赋值给sum
 // sum为(旧的,已经进入循环的数)的和,i 为新进入循环的数。当加到(最后一个新数i)时,sum就是最后的 总和
 }
}

console.log(sum); // 打印总和
```
````

如果要再套一层,就在最外层 加 5` ,以此类推……


7.3 如何在行内代码里显示反引号

首尾各用 两个反引号`+ 空格 包裹

格式:

``+空格+带`的内容+空格+``  <!-- 不要忘记前后的两个空格 -->

`` 这是一段能显示`反引号`的行内代码 ``

效果:

这是一段能显示`反引号`的行内代码



8. 任务列表(待办)

- [ ] 待办任务列表1
- [ ] 待办任务列表2
- [x] 已办任务列表1    <!-- 英文字母X -->
- [x] 已办任务列表2

示范



示范



9. 注释

Markdown注释HMTL 一样,注释的内容在 渲染界面 不可见 (部分编辑器可见)

<!-- 这里是一行注释 -->

<!--
这里是
一段
假装有
很多行的
注释
-->

%%这是一行Obsidian里的注释%%

%%
这里是
一段
假装有
很多行的
Obsidian里的
注释
%%

示范 (只有切换至 编辑模式 才能看到喔)

%%这是一行Obsidian里的注释%%

%%
这里是
一段
假装有
很多行的
Obsidian里的
注释
%%



10. 变量


10.1 网页链接变量

[百度一下,你就知道][度娘]
[知乎-有问题,就会有答案][知乎]

<!-- 这里是变量区域 -->
[度娘]: http://www.baidu.com 
[知乎]: https://www.zhihu.com    

示范

百度一下,你就知道

知乎-有问题,就会有答案


10.2 脚注

鲁迅原名是什么[^1] ,浙江哪里人[^2]

<!-- 这里是变量区域 -->
[^1]: 周树人
[^2]: 绍兴人

示范

鲁迅原名是什么[1],浙江哪里人[2]



11. 拓展文本格式标记


11.1 键盘文本

11.1.1 加粗键盘文本


11.2 放大文本

11.2.1 放大粗体文本


11.3 缩小文本

11.3.1 缩小斜体文本


11.4 多彩文本


11.4.1 多彩粗体文本


11.4.2 多彩斜体文本

  1. 格式1: *<font color=teal>This is an italic teal text</font>*
    • 效果: This is an italic teal text
  2. 格式2: <font color=teal>*This is an italic teal text*</font>
    • 效果: This is an italic teal text

11.4.2 多彩粗斜体文本

  1. 格式1: ***<font color=teal>This is a bold italic teal text</font>***
    • 效果: This is a bold italic teal text
  2. 格式2: <font color=teal>***This is a bold italic teal text***</font>
    • 效果: This is a bold italic teal text

#注意 多彩文本尽量慎用,Markdown 的核心就是 简洁精炼,注重 实质内容,而非花哨的 颜色样式



12. 拓展文本显示效果


12.1 文本高亮


12.2 上标


12.3 下标


12.4 Emoji 符号

用一对 : 包裹,里面是 Emoji 符号的 语义化文本 ( Typora编辑器 中,输入 : 就会带提示器 )




13. 转义字符


例1 以普通字符显示星号


例2 表格内 单元格中的竖杠

|表头1|表头2|
|-|-|
|这里的文本被\|分隔|这里的文本也被\|分隔|
表头1 表头2
这里的文本被|分隔 这里的文本也被|分隔

#补充 该技巧可用于 Obsidian 表格内 双链的文本修饰

文本修饰:

在 双链[[ ]]内 以 | 引导的内容

表格内的格式:

| 前面加上 \

示例:

|                  表头1                  |                        表头2                        |
|:---------------------------------------:|:---------------------------------------------------:|
| 单元格中的竖杠 | 不会变成代码的反引号 |

效果:

表头1 表头2
单元格中的竖杠 不会变成代码的反引号

例3 不会变成代码的反引号

使用 转义符号\ 让 反引号` 变成普通字符,不再具有行内代码的标识符功能

格式:

\`这段被反引号包裹的内容不会变成行内代码\`

效果:

`这段被反引号包裹的内容不会变成行内代码`


例4 链接中的中括号

网页链接显示文本内容 中,使用 中括号 [ ]


例5 不是列表的连接符(横杠)

如下所示:

The Web, the Tree, and the String.
写作之难,在于把网状的思考,用树状结构,体现在线性展开的语句里。

The Web, the Tree, and the String.
写作之难,在于把网状的思考,用树状结构,体现在线性展开的语句里。
- 史蒂芬·平克


例6 不是标题的 #

# 不被识别为标题标识符

格式:

\# 这里的内容不会被识别为标题

效果:

# 这里的内容不会被识别为标题


例7 不会注释的 %

Obsidian 中 注释是前后各两个 %

使用 转义符号\,让 ` s=start e=end f=fork n=normal

s([开始])-->f1{{if条件}};

%% 分支点2
f1--true-->n1[if语句块]-->e([结束]);
f1--false-->f2{{else if条件}};

%% 分支点1
f2--true-->n2[else if语句块]-->e;
f2--false-->n3[else语句块]-->e;

渲染1:

graph TB
	%% s=start  e=end  f=fork  n=normal
	
	s([开始])-->f1{{if条件}};

	%% 分支点1
	f1--true-->n1[if语句块]-->e([结束]);
	f1--false-->f2{{else if条件}};

	 s=start  e=end  f= fork n=normal 
	
	%% 虚线
	s[朱百六]-.->|子|n1[朱四九]-.->|子|n2[朱五四]-.->|子|f1_帝((朱八八))
	
	%% 分支点 朱八八
	f1_帝-->|长子|f2[朱标]
	f1_帝-->|次子|n3[朱樉]
	f1_帝-->|三子|n4[朱棢]
	f1_帝-->|四子|n5_帝((朱棣))
	
	 s=start  e=end  f= fork n=normal 
	
	%% 虚线
	s[朱百六]-.->|子|n1[朱四九]-.->|子|n2[朱五四]-.->|子|f1_帝((朱八八))
	
	%% 分支点 朱八八
	f1_帝-->|长子|f2[朱标]
	f1_帝-->|次子|n3[朱樉]
	f1_帝-->|三子|n4[朱棢]
	f1_帝-->|四子|n5_帝((朱棣))
	
	 自动编号
	autonumber
	%% 定义参与者并取别名,aliases:别名
        participant A as Aly
        participant B as Bob
        participant C as CofCai
        %% 便签说明
        Note left of A: 只复习了一部分
        Note right of B: 没复习
        Note over A,B: are contacting
        
        A->>B: 明天是要考试吗?
        B-->>A: 好像是的!
        
        %% 显示并行发生的动作,parallel:平行
        %% par [action1]
        rect rgb(0, 25, 155)
            par askA
                C -->> A:你复习好了吗?
            and askB
                C -->> B:你复习好了吗?
            and self
                C ->>C:我还没准备复习......
            end
        end
        
        %% 背景高亮,提供一个有颜色的背景矩形
        rect rgb(25, 55, 0)
            loop 自问/Every min
            %% 
可以换行 C ->> C:我什么时候
开始复习呢? end end %% 可选择路径 rect rgb(153, 83, 60) alt is good A ->> C:复习了一点 else is common B ->> C:我也是 end %% 没有else时可以提供默认的opt opt Extra response C ->> C:你们怎么不回答我 end endsequenceDiagram %% 自动编号 autonumber %% 定义参与者并取别名,aliases:别名 participant A as Aly participant B as Bob participant C as CofCai %% 便签说明 Note left of A: 只复习了一部分 Note right of B: 没复习 Note over A,B: are contacting A->>B: 明天是要考试吗? B-->>A: 好像是的! %% 显示并行发生的动作,parallel:平行 %% par [action1] rect rgb(0, 25, 155) par askA C -->> A:你复习好了吗? and askB C -->> B:你复习好了吗? and self C ->>C:我还没准备复习...... end end %% 背景高亮,提供一个有颜色的背景矩形 rect rgb(25, 55, 0) loop 自问/Every min %%
可以换行 C ->> C:我什么时候
开始复习呢? end end %% 可选择路径 rect rgb(153, 83, 60) alt is good A ->> C:复习了一点 else is common B ->> C:我也是 end 自动编号 autonumber %% 定义参与者并取别名,aliases:别名 participant A as Aly participant B as Bob participant C as CofCai %% 便签说明 Note left of A: 只复习了一部分 Note right of B: 没复习 Note over A,B: are contacting A->>B: 明天是要考试吗? B-->>A: 好像是的! %% 显示并行发生的动作,parallel:平行 %% par [action1] rect rgb(0, 25, 155) par askA C -->> A:你复习好了吗? and askB C -->> B:你复习好了吗? and self C ->>C:我还没准备复习...... end end %% 背景高亮,提供一个有颜色的背景矩形 rect rgb(25, 55, 0) loop 自问/Every min %%
可以换行 C ->> C:我什么时候
开始复习呢? end end %% 可选择路径 rect rgb(153, 83, 60) alt is good A ->> C:复习了一点 else is common B ->> C:我也是 end %% 没有else时可以提供默认的opt opt Extra response C ->> C:你们怎么不回答我 end end

17.4 甘特图


源码:

```mermaid
gantt
    title A Gantt Diagram
    dateFormat  YYYY-MM-DD
    section Section
    A task           :a1, 2014-01-01, 30d
    Another task     :after a1  , 20d
    section Another
    Task in sec      :2014-01-12  , 12d
    another task      : 24d
```

渲染:

gantt
    title A Gantt Diagram
    dateFormat  YYYY-MM-DD
    section Section
    A task           :a1, 2014-01-01, 30d
    Another task     :after a1  , 20d
    section Another
    Task in sec      :2014-01-12  , 12d
    another task      : 24d

17.5 类图


源码:

```mermaid
classDiagram
    Animal <|-- Duck
    Animal <|-- Fish
    Animal <|-- Zebra
    Animal : +int age
    Animal : +String gender
    Animal: +isMammal()
    Animal: +mate()
    class Duck{
      +String beakColor
      +swim()
      +quack()
    }
    class Fish{
      -int sizeInFeet
      -canEat()
    }
    class Zebra{
      +bool is_wild
      +run()
    }
```

渲染:

classDiagram
    Animal <|-- Duck
    Animal <|-- Fish
    Animal <|-- Zebra
    Animal : +int age
    Animal : +String gender
    Animal: +isMammal()
    Animal: +mate()
    class Duck{
      +String beakColor
      +swim()
      +quack()
    }
    class Fish{
      -int sizeInFeet
      -canEat()
    }
    class Zebra{
      +bool is_wild
      +run()
    }



18. 标签 (Tag)

格式:

关于空格




关于数字


标签的嵌套

在标签名内,使用 / 斜杠 可以实现标签的嵌套

格式:

嵌套标签可以像普通标签一样通过点击来唤起搜索,嵌套标签允许你选择搜索的层次。例如:


能被使用的符号

综上所述,标签内能被使用的符号共有三种

  1. _ 下划线
  2. - 连字符
  3. / 斜杠

如何让 # 不被识别

可以使用前面提到的转义符号 \ 反斜杠,与上述的 转义标题 类似

格式:

\#这里的内容不会被识别为标签

效果:

#这里的内容不会被识别为标签


19. 避免标识符的滥用

即使在 Markdown 中,也要尽量避免标识符的滥用

比如我的这篇教程,就存在一定程度的滥用

标识符的本质是突出显示,代表重点

三种标识,慎用

  1. 词中对单个汉字的标识
  2. 短语中对单个英语单词的标识
    1. get a bang out of
  3. 标识符的多层嵌套
    1. 我感觉快要==原地起飞==了

原因:


  1. 周树人 ↩︎

  2. 绍兴人 ↩︎